#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

/* On ne corrige pas les questions de découverte, seulement les exercices */

// Q21

int factorielle(int n){
    int res = 1;
    for (int i=2; i<=n; i+=1){
        res *= i;
    }
    return res;
}

// On remarque normalement un dépassement d'entiers, un très grand entier devient négatif puis par hasard la facctorielle devient nulle

// Q22

int sommeG(int n){
    int res = 0;
    for(int k=0; k<=n; k+=1){
        res+=k*k*k;
    }
    return res;
}


float sommeH(int n){
    float res = 0;
    for(int k=1; k<=n; k+=1){
        res+=1.0/k; //ici le 1.0 est important, sinon C fait une division euclidienne entre 1 et k
    }
    return res;
}

// Q23

void compte_rebours(){
    for (int i=100; i>=0; i-=1){
        printf("%d ", i);
    }
}

// Q24

void affiche_triangle_rectangle_plein(int n){
    for(int i=1; i<=n; i+=1){
        for(int j=1; j<=i; j+=1){
            printf("*");
        }
        printf("\n");
    }
}

void affiche_triangle_rectangle_etoile_trait(int n){
    for(int i=1; i<=n; i+=1){
        for(int j=1; j<=i; j+=1){
            if (i%2 == 1) printf("*");
            else printf("-");
        }
        printf("\n");
    }
}

void affiche_triangle_rectangle_vide(int n){
    printf("*\n"); //Première ligne
    for(int i=2; i<=n-1; i+=1){
        printf("*");
        for(int j=1; j<=i-2; j+=1){
            printf(" ");
        }
        printf("*\n");
    }
    for(int j=1; j<=n; j+=1){ //Dernière ligne
            printf("*");
        }
        printf("\n");
}

// L'affichage du triangle isocele est en fait un affichage  d'un rectangle de taille n lignes, 2*(n-1)+1 colonnes

void affiche_triangle_isocele_plein(int n){
    for(int i=0; i<=n-1; i+=1){
        int taille_blanc = n-1-i;
        for(int j=1; j<=taille_blanc; j+=1){
            printf(" ");
        }
        for(int j=1; j<=2*i+1; j+=1){
            printf("*");
        }
        printf("\n");
    }
}
void affiche_triangle_isocele_vide(int n){
    for(int i=0; i<=n-2; i+=1){
        int taille_blanc = n-1-i;
        for(int j=1; j<=taille_blanc; j+=1){
            printf(" ");
        }
        if(i!=0){
            printf("*");
            for(int j=2; j<=2*i; j+=1){
                printf(" ");
            }
        }
        printf("*\n");
    }
    for(int i=0; i<=2*n-2;i+=1){
        printf("*");
    }
    printf("\n");
}

//Q25

int un_rec(int n){
    if (n==0){return 4;}
    else if (n==1){return 7;}
    else {return 3+un_rec(n-1)+4*un_rec(n-2);}
}

//Q26

int fact_rec(int n){
    if(n==0){return 1;}
    return n*fact_rec(n-1);
}

int main(){
    //printf("%d\n", factorielle(5));
    
    //printf("%d\n", sommeG(4));
    //printf("%f\n", sommeH(4));
    
    //compte_rebours();
    
    //affiche_triangle_rectangle_plein(6);
    //affiche_triangle_rectangle_etoile_trait(6);
    //affiche_triangle_rectangle_vide(6);
    //affiche_triangle_isocele_plein(6);
    //affiche_triangle_isocele_vide(6);
    
    //printf("%d\n", un_rec(2));
}
